package Exer9;

import java.io.IOException;
import java.util.Comparator;

public class StudentInfoSystem {
    public static void main(String[] args) {
        // 文件路径（确保students.txt在项目根目录）
        String inputFilePath = "students.txt";
        String outputFilePath = "top_students_names.txt";

        try {
            // 读取学生数据（明确处理5个字段）
            DataContainer<Student> studentContainer = GenericFileHandler.readFromFile(
                    inputFilePath,
                    line -> {
                        // 分割成5个字段
                        String[] parts = line.split(",");

                        // 强制检查：必须是5个字段
                        if (parts.length != 5) {
                            throw new IllegalArgumentException(
                                    "数据格式错误！需要5个字段，实际有" + parts.length + "个 → 错误行：" + line
                            );
                        }

                        try {
                            // 按顺序解析5个字段（严格对应：姓名,学号,年龄,专业,日期）
                            String name = parts[0].trim();       // 字段1：姓名
                            String id = parts[1].trim();         // 字段2：学号
                            int age = Integer.parseInt(parts[2].trim());  // 字段3：年龄（转数字）
                            String major = parts[3].trim();      // 字段4：专业
                            String date = parts[4].trim();       // 字段5：日期

                            // 创建Student对象（对应上面的5参数构造函数）
                            return new Student(name, id, age, major, date);
                        } catch (NumberFormatException e) {
                            throw new IllegalArgumentException(
                                    "年龄格式错误（必须是数字）→ 错误行：" + line + " → 原因：" + e.getMessage()
                            );
                        }
                    }
            );

            // 打印读取结果（验证是否成功）
            System.out.println("成功读取 " + studentContainer.size() + " 条学生数据：");
            for (int i = 0; i < studentContainer.size(); i++) {
                System.out.println((i+1) + ". " + studentContainer.get(i));
            }

            // 如果你需要排序：例如按年龄升序（根据你的需求修改）
            DataContainer<Student> sortedStudents = GenericConverter.sort(
                    studentContainer,
                    Comparator.comparingInt(Student::getAge)  // 按年龄排序
            );

            // 如果你需要筛选：例如筛选"信息管理与信息系统"专业（根据你的需求修改）
            DataContainer<Student> filteredStudents = sortedStudents.filter(
                    s -> "信息管理与信息系统".equals(s.getMajor())
            );
            System.out.println("\n筛选后符合条件的学生有 " + filteredStudents.size() + " 人");

            // 提取姓名
            DataContainer<String> studentNames = GenericConverter.convert(
                    filteredStudents,
                    Student::getName  // 提取姓名
            );

            // 写入结果文件
            GenericFileHandler.writeToFile(studentNames, outputFilePath);
            System.out.println("处理完成！结果已保存到：" + outputFilePath);

        } catch (IOException e) {
            System.err.println("文件操作失败：" + e.getMessage());
        } catch (Exception e) {
            System.err.println("处理失败：" + e.getMessage());
        }
    }
}
